/** 列表允许的dom类型 */
const LIST_DICT = ['H1','H2','H3','H4','H5','H6'];
/** 标记列表子项code属性的名字 */
const DOC_LINE_ID_KEY = 'doc_line_id';

/** 获取标题类型集合 */
export function getTitleTypes() {
    return LIST_DICT;
}
/** 获取标题属性Key */
export function getTitleAttributeKey() {
    return DOC_LINE_ID_KEY;
}
/** 设置标题编号 */
export function setTitleNumber(listElement, typeIndex, startIndex, endIndex, parentNum) {
    if(!typeIndex>=LIST_DICT.length) return;
    let num = 0;
    let currentNum='';
    let i = startIndex;
    for(; i<=endIndex; i++) {
        const p = listElement.childNodes[i];
        if(!p || !p.childNodes || p.childNodes.length===0 || !p.childNodes[0].tagName) continue;
        let currentTypeIndex = LIST_DICT.indexOf(p.childNodes[0].tagName);
        let isHandleChildren = false;
        if(currentTypeIndex < 0){   // 如果元素不是标题元素，则不处理
            continue;
        } else if(currentTypeIndex === typeIndex) {  // 如果元素等级是当前处理的等级，则处理
            num++;
            currentNum = parentNum?parentNum+'.'+num:num;
            p.childNodes[0].setAttribute('num',currentNum);
            p.childNodes[0].hasAttribute('err') && p.childNodes[0].removeAttribute('err');
            isHandleChildren = false;
        } else if(currentTypeIndex<typeIndex) { // 如果元素等级大于当前处理的等级，则返回
            return i;
        } else if(isHandleChildren===false && currentTypeIndex==typeIndex+1) { // 如果元素等级是下一级，就做递归处理
            isHandleChildren = true;
            i = setTitleNumber(listElement,typeIndex+1, i, endIndex, currentNum) - 1;
        } else if(currentTypeIndex>typeIndex+1) { // 如果元素等级不连续，测提出警告
            p.childNodes[0].hasAttribute('num') && p.childNodes[0].removeAttribute('num');
            p.childNodes[0].setAttribute('err', '级别错误');
        }
    }
    return  i;
}
